/*******************************************************************************
 * 版权：北京润尼尔网络科技有限公司，保留所有版权<br>
 * 版本：v1.0.0<br>
 * 文件：PartLibDataObject.js<br>
 * 日期：2017年10月6日<br>
 * 作者: 杨顺强<br>
 * 功能：元件库存储数据结构<br>
 *
 * 修改记录：<br>
 * 日期 描述 更新功能<br>
 ******************************************************************************/

window.makeNamespace(window, 'Rainier.UI.V2');
/**
 * 类型名称：Rainier.UI.V2.Rainier.UI.V2.PartLibDataObject<br>
 * 类型功能：实验库总体数据，实现对象<br>
 */
Rainier.UI.V2.PartLibDataObject = Rainier.UI.V2.DataObject.extend({
  NAME: 'Rainier.UI.V2.PartLibDataObject',

  /**
   * 初始化函数
   */
  init: function (data) {
    var dataObj = new Rainier.UI.V2.DataObject(data);
    this.root = dataObj;
    this._super();
  },

  /**
   * 函数名称：Rainier.UI.V2.PartLibDataObject.add<br>
   * 函数功能：添加子节点<br>
   * 参数输入：data		 ：添加的值<br>
   * 参数输入：parentdata ：添加父节点的值<br>
   * 参数输出：无<br>
   * 函数返回：无<br>
   * 异常信息：父节点不存在<br>
   */
  addData: function (data, parentData) {
    var dataObj = new Rainier.UI.V2.DataObject(data);
    var parentDataObj = this.findDataObj(parentData);
    if (parentDataObj) {
      parentDataObj.addChild(dataObj.getUuid(), dataObj);
    } else {
      throw new Error('Cannot add node to a non-existent parent');
    }
  },

  /**
   * 函数名称：Rainier.UI.V2.PartLibDataObject.findDataObj<br>
   * 函数功能：通过值，查找当前节点<br>
   * 参数输入：data:当前值<br>
   * 参数输出：无<br>
   * 函数返回：node:当前值对应的节点<br>
   * 异常信息：无<br>
   */
  findDataObj: function (data) {
    var findDataObj = null;
    var callback = function (dataObj) {
      if (dataObj.data === data) {
        findDataObj = dataObj;
      }
    };
    Rainier.Basic.CompositeObject.recursiveEach(this.root, callback);
    if (findDataObj) {
      return findDataObj;
    } else {
      console.log('您查找的节点不存在，请检查对应的程序，完成对程序的修改');
    }
  },

  /**
   * 函数名称：Rainier.UI.V2.PartLibDataObject.getChildren<br>
   * 函数功能：获取当前节点的的子元素<br>
   * 参数输入：data		：节点的值<br>
   * 参数输出：children :节点的子元素<br>
   * 函数返回：无<br>
   * 异常信息：无<br>
   */
  getChildren: function (data) {
    var currentDataObj = this.findDataObj(data);
    return currentDataObj.getChildren();
  },

  /**
   * 函数名称：Rainier.UI.V2.PartLibDataObject.findLikeValue<br>
   * 函数功能：在当前书中查找与输入字符串相似的元素<br>
   * 参数输入：str:查找字符串<br>
   * 参数输出：无<br>
   * 函数返回：findResult：查找结果<br>
   * 异常信息：无<br>
   */
  findLikeValue: function (str) {
    var findResult = [];
    var callback = function (dataObj) {
      var data = dataObj.data;
      var componentName = null;
      if (data.componentName) {
        var componentName = data.componentName.toUpperCase();
      }
      if (componentName && componentName.indexOf(str.toUpperCase()) != -1) {
        findResult.push(data);
      }
    };
    Rainier.Basic.CompositeObject.recursiveEach(this.root, callback);
    return findResult;
  },
});
